package br.com.vertigo.sgci.session;

import javax.faces.application.FacesMessage;
import javax.persistence.NoResultException;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityHome;

import br.com.vertigo.sgci.entity.Cliente;
@SuppressWarnings("serial")
@Name("clienteHome")
public class ClienteHome extends EntityHome<Cliente> {

	
	public void setClienteIdCliente(Long id) {
		setId(id);
	}

	public Long getClienteIdCliente() {
		return (Long) getId();
	}

	@Override
	protected Cliente createInstance() {
		Cliente cliente = new Cliente();
		return cliente;
	}

	public void wire() {
		getInstance();
	}

	public boolean isWired() {
		return true;
	}

	public Cliente getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}
	
	public boolean validaCliente(Cliente cliente){
		boolean valido = false;
		try {
			 getEntityManager().createQuery("select cliente from Cliente cliente where cliente.nome = :nome")
			.setParameter("nome", cliente.getNomeTransient()).getSingleResult();
		}catch(NoResultException ex) {
			valido = true;
		}
		return valido;
	}
	
	public String persist(){
		String resultado = "falha";
		Cliente cliente = getInstance();
		if(validaCliente(cliente) == true){
			cliente.setNome(cliente.getNomeTransient());
			setCreatedMessage("");
			getFacesMessages().add(FacesMessage.SEVERITY_INFO, Constants.MSG_SUCESS_CREATE);
			super.persist();
			resultado = "sucesso";
		}else{
			getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_CLIENTE_DUP);
		}

		return resultado;
	}
	
	public String update(){
		String resultado = "falha";
		Cliente cliente = getInstance();
		if(validaCliente(cliente) == true){
			try{
				cliente.setNome(cliente.getNomeTransient());
				setUpdatedMessage("");
				super.update();
				resultado = "sucesso";
				getFacesMessages().add(FacesMessage.SEVERITY_INFO, Constants.MSG_SUCESS_UPDATE);
			}catch (Exception e){
				e.printStackTrace();
				getFacesMessages().add(FacesMessage.SEVERITY_ERROR, "Erro");
			}
		}else{
			getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_CLIENTE_DUP);
		}
		return resultado;
	}
	
	public String remove(){
		String resultado = "aviso";
		setDeletedMessage("");
		try{
			super.remove();
			getFacesMessages().add(FacesMessage.SEVERITY_INFO, Constants.MSG_SUCESS_DELETE);
			resultado = "sucesso";
		}catch (Exception e){
			e.printStackTrace();
			getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_ERROR_DELETE);
			resultado = "falha";
		}
		return resultado;
	}
}